<?php

/**
 * @author PeoneEr
 * @package aion personal cabinet v1.0
 * @copyright Aion Factory Inc. 2010-2011
 * @license GNU v3
 * @link Ai-Factory.ru && http://code.google.com/p/aionprivateofficev2
 */
require_once "core/application/models/mexchange/mexchange.php";
require_once "core/application/models/musers/musers.php";
require_once "core/application/controllers/cmoney.php";
require_once "core/application/classes/errorClass.php";
require_once "core/application/classes/selectValueClass.php";
require_once "core/application/classes/isOnlineClass.php";

class exchangeMoney_Controller extends Exchange_Model {
    /**
     *
     * @var static $_instance
     * @var int $_percent
     * @var object $_lang
     * @var array $_params
     */
    private static $_instance = NULL;
    private $_percent            = 0;
    public $_lang             = NULL;
    private $_params       = array();

    public static function getInstance() {
        if (is_null(self::$_instance)) {
            $class = __CLASS__;
            self::$_instance = new $class();
        }
        return self::$_instance;
    }

    private function catchItemsCount() {
        /**
         * значение введенное в инпут
         * @return int $itemsCount
         */
        /* если значение пустое или не существует - выходим нахер */
        if (!isset($_POST['countOfExchangeItemToAccount']) or empty($_POST['countOfExchangeItemToAccount']) or !is_numeric($_POST['countOfExchangeItemToAccount'])) {
            $this->echoError("Значение числа для обмена должна отличаться от нуля");
        }
        return $_POST['countOfExchangeItemToAccount'];
    }

    private function mathBackPercent() {
        /**
         *  проценты
         * @var int $itemsCount
         * @var int $percent
         * @return $percent
         * @method catchItemsCount
         */
        if ($this->catchItemsCount() > 0 AND $this->catchItemsCount() <= 1000) {
            $this->_percent = 2;
        } else if ($this->catchItemsCount() >= 1000 AND $this->catchItemsCount() <= 10000) {
            $this->_percent = 5;
        } else if ($this->catchItemsCount() >= 10000 AND $this->catchItemsCount() <= 100000) {
            $this->_percent = 7;
        } else if ($this->catchItemsCount() >= 100001) {
            $this->_percent = 10;
        } else {
            $this->_percent = 4;
        }
        return $this->_percent;
    }

    private function mathBack($percent) {
        /**
         *  сколько итемов останется, после снятия процентов
         * @method catchItemsCount
         * @param int $percent
         * @var int $newItemsCount - содержит новое значение
         * @return $newItemsCount
         */
        return $this->catchItemsCount() - ($this->catchItemsCount() / 100 * $percent);
    }

    private function catchParams() {
        $params = array(
            'charName' => $_POST['charName'],
            'exchangeCount' => $_POST['countOfExchangeItemToAccount']
        );
        return $params;
    }

    public function showCountOfExchange() {
        /**
         *  сколько итемов у нас останется
         * @method mathBackPercent()
         * @method mathBack()
         * @method round()
         */
        if (strlen($this->mathBack($this->mathBackPercent())) > 12) {
            $this->echoError("Слишком большое число для обмена");
        }
        $this->echoSuccess ("Ваш процент <b>" . $this->mathBackPercent() . "</b> 
            <br /> 
            Вы получите <b>" . round($this->mathBack($this->mathBackPercent())) . "</b>");
    }

    public function getCharsOnAccount() {
        /**
         * чары на аккаунте
         */
        $this->_lang = $this->getLanguage();
        $chars = $this->getListChars();
        if (is_null($chars) || empty($chars)) {
            error::getInstance($this->_lang->language['defaultError']);
        }
        foreach ($chars as $key => $val) {
            echo "<option value='" . $val . "'>" . $val . "</option>";
        }
        unset($this->_lang, $chars);
    }

    public function exchangeToMoney() {
        $this->_lang = $this->getLanguage();
        $this->_params = $this->catchParams();
        $itemCount = $this->getCountItemsFromChar($this->getCharId($this->_params['charName']), valueSelect::selectValue(1));
        $currentMoney = Cmoney::getInstance()->showMoney();
        $toMoney = $this->mathBack($this->mathBackPercent());
        if (strlen($toMoney) > 12)
            $this->echoError("Слишком большое число для обмена");
        if ($itemCount < round($toMoney))
            $this->echoError("У персонажа " . $this->_params['charName'] . " нет столько предметов. Попробуйте ввести меньшее значение");
        if ($itemCount - round($toMoney) < 2)
            $this->echoError("У персонажа не может остаться меньше одной вещи после перевода средств");
        if (isOnline::getInstance()->online($this->_params['charName']))
            $this->echoError("Персонаж " . $this->_params['charName'] . " находится в игре. Перевести с него валюту невозможно");
        $itemCount -= round($toMoney);
        $currentMoney += round($toMoney);
        try {
            Cmoney::getInstance()->updateMoney($currentMoney);
            try {
                $this->deleteItems($itemCount, $this->getCharId($this->_params['charName']), valueSelect::selectValue(1));
                $this->echoSuccess("С персонажа <b>" . $this->_params['charName'] . "</b> было списано " . round($toMoney) . " предметов <br />
                Эти предметы были переведены на счет Вашего аккаунта
                ");
            } catch (Exception $e) {
                echo $e->getMessage();
                error::getInstance($this->_lang->language['defaultError']);
            }
        } catch (Exception $e) {
            echo $e->getMessage();
            error::getInstance($this->_lang->language['defaultError']);
        }
    }

}

?>
